package booebill;

import java.awt.Image;
import javax.swing.ImageIcon;

/**
 *
 * @author druciaki
 * druciaki@gmail.com
 * @author lagaz
 * daniel.lagarto@gmail.com
 *
 */

/**
 *Classe Tiro, que implementa o tiro da nave boo ou bill.
 *Cada tiro é uma nova thread (por enquanto) - podemos tentar usar algum controle
 *para sincronização de threads (mutex/semaforo)
 *É questionavel tb se não vai ter mais de um tipo de tiro... dai esses diam extender
 *a própria classe tiro?
 */
public class Tiro extends Thread
{
    
    protected int iPosX;
    protected int iPosY;
    protected double dVelocidade;   //Velocidade do tiro
    protected boolean bTiro=false;  //boolean para dizer se o tiro ainda existe.
    protected Image ImageTiro;      //Imagem do tiro.
    protected String sRecurso;
    
    private int iLarguraTela;
    
    private boolean bPronto = false;//boolean que diz se pode atirar
    
    /**
     *Construtor do Tiro
     *@param sRecurso único parametro a ser passado, indica a String do nome do arquivo da imagem do tiro.
     *@param dVelocidade Velocidade do projétil, valor *-1 para definir bandido/mocinho
     */
    public Tiro(int iPosX, int iPosY, String sRecurso, double dVelocidade, int iLarguraTela, TelaJogo TelaJogox)
    {
        super(sRecurso+iPosX);
        this.iPosX = iPosX;
        this.iPosY = iPosY;
        this.sRecurso = sRecurso;
        this.ImageTiro=new ImageIcon(getClass().getResource(sRecurso)).getImage();
        this.dVelocidade = dVelocidade;
        this.iLarguraTela = iLarguraTela;
        this.bTiro = true;
        start();
    }
    
    /**
     *Retorna a imagem do tiro
     *@return Image retorna a imagem referente ao tiro.
     */
    public Image getImagem()
    {
        return ImageTiro;
    }
    
    /**
     *Retorna posição X do tiro
     *@return iPosX = coordenada no eixo X
     */
    public int getX()
    { return(iPosX); }
    /**
     *Determina uma posição X para o tiro.
     *@param iPosX = determina nova coordenada no eixo X
     */
    public void setX(int iPosX)
    { this.iPosX = iPosX; }
    /**
     *Retorna posição Y do tiro
     *@return iPosY = coordenada no eixo Y
     */
    public int getY()
    { return(iPosY); }
    /**
     *Determina uma posição Y para o tiro.
     *@param iPosY = determina nova coordenada no eixo Y
     */
    public void setY(int iPosY)
    { this.iPosY = iPosY; }
    /**
     *Retorna se o tiro ainda existe
     *@return bTiro boolean true para o tiro ainda existe e false para não existente.
     */
    public boolean getTiro()
    { return(bTiro); }
    public void setTiro(boolean bTiro)
    { this.bTiro=bTiro; }
    
    /*
     *@return retorna a posicao X do tiro
     */
    public int vai()
    {
        if((iPosX>=0) && (iPosX<=iLarguraTela-10))
        {
            iPosX = (int)(iPosX-dVelocidade);
            for(int i=0;i<dVelocidade;i++)
            {
                //TelaJogox.M
            }
        }
        else
        {
            bTiro = false;
            this.currentThread().interrupt();
        }
        return(iPosX);
    }
    
    /**
     *FALTA IMPLEMENTAR o RUN do TIRO... (como vai funcionar os tiros? tiros diferentes??)
     */
    public void run()
    {        
        while(bTiro)
        {
            try
            {
                vai();
                //System.out.println(this.getX()); //DEBUG
                sleep(50);
            }
            catch(InterruptedException ex)
            {
                System.out.println("nao vai mais");
            }
        }
        try
        {
            sleep(50);
        }
        catch (InterruptedException ex)
        {
            ex.printStackTrace();
        }
        
    }
    
    
}
